package dibujo;

import java.awt.Graphics;
import java.util.Vector;

import org.uc3m.ed.interfaz_grafica.ventana.VentanaPrincipal;
import org.uc3m.ed.tad.lista.Cola;


import panel.PanelDibujoCola;




public class DibujoCola{

	private Vector<NodoDibujo> _elementos;
	
	private NodoEnvoltura _cabecera; 
	
	private PanelDibujoCola _panelDibujo;
	
	public DibujoCola()
	{
		_elementos=null;
		_cabecera=null;
	}
	
	public DibujoCola(PanelDibujoCola panelDibujoPila)
	{
		_elementos=null;
		_cabecera=null;
		_panelDibujo=panelDibujoPila;
	}

	public void dibujar(Graphics grafico, Cola<Integer>  estructura) {
	
		try{
			if(estructura!=null)
			{
				if (!estructura.estaVacia())
				{
					_elementos=new Vector<NodoDibujo>();
					while(!estructura.estaVacia())
						_elementos.add(new NodoDibujo(grafico,estructura.extraer().toString()));
					
					configurarNodos();
					for(int i= 0;i<_elementos.size();i++)
					{
						estructura.anyadir(new Integer(_elementos.get(i).getDato()));
						_elementos.get(i).crearNodo();
					}
					
					_cabecera= new NodoEnvoltura(grafico,_elementos.lastElement());
				}
				else
					_cabecera= new NodoEnvoltura(grafico,null);
				
				
				configurarCabecera();
				_cabecera.crearCabeceraCola();
			}
			else
				VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::7\n   La estructura creada es null");
		}catch(NullPointerException e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::8\n  Estructura mal creada");
			_panelDibujo.setEstructura(null);
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::1\n   Se ha produciodo una Excepcion: "+e.toString());
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::2\n   Se ha produciodo un Error: "+e.toString());
		}
		
	}

	

	private void configurarNodos() {
		try{
			NodoDibujo anterior=_elementos.firstElement(),siguiente=null;
			anterior.setPosicionX((_panelDibujo.getWidth()/2)-(anterior.getAnchoNodo()/2));
			anterior.setPosicionY(_panelDibujo.getHeight()-anterior.getAltoNodo()-130);
			
			for(int i=1 ;i<_elementos.size();i++)
			{
				siguiente=_elementos.get(i);
				siguiente.setPosicionX(anterior.getPosicionX());
				siguiente.setPosicionY(anterior.getPosicionY()-anterior.getAltoNodo());
				anterior=siguiente;
				
				if ((anterior.getPosicionY()-anterior.getAltoNodo()-100)<0)
					_panelDibujo.setSize(_panelDibujo.getWidth(), _panelDibujo.getHeight()+anterior.getAltoNodo());
			}
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::3\n   Se ha produciodo una Excepcion: "+e.getMessage());
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::4\n   Se ha produciodo un Error: "+e.getMessage());
		}
		
	}
	
	private void configurarCabecera() {
		try{
			_cabecera.setPosicionX((_panelDibujo.getWidth()/2)-(_cabecera.getAnchoNodo()/2));
			_cabecera.setPosicionY(_panelDibujo.getHeight()-130);
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::5\n   Se ha produciodo una Excepcion: "+e.getMessage());
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Cola::DibujoCola ERROR::6\n   Se ha produciodo un Error: "+e.getMessage());
		}
	}


	

}
